table of contents
GIT-HTTP-BACKEND(1) | Git Manual | GIT-HTTP-BACKEND(1) |
NAME¶
git-http-backend - Server side implementation of Git over HTTP
SYNOPSIS¶
git http-backend
DESCRIPTION¶
A simple CGI program to serve the contents of a Git repository to Git clients accessing the repository over http:// and https:// protocols. The program supports clients fetching using both the smart HTTP protocol and the backwards-compatible dumb HTTP protocol, as well as clients pushing using the smart HTTP protocol.
It verifies that the directory has the magic file "git-daemon-export-ok", and it will refuse to export any git directory that hasn’t explicitly been marked for export this way (unless the GIT_HTTP_EXPORT_ALL environmental variable is set).
By default, only the upload-pack service is enabled, which serves git fetch-pack and git ls-remote clients, which are invoked from git fetch, git pull, and git clone. If the client is authenticated, the receive-pack service is enabled, which serves git send-pack clients, which is invoked from git push.
SERVICES¶
These services can be enabled/disabled using the per-repository configuration file:
http.getanyfile
http.uploadpack
http.receivepack
URL TRANSLATION¶
To determine the location of the repository on disk, git http-backend concatenates the environment variables PATH_INFO, which is set automatically by the web server, and GIT_PROJECT_ROOT, which must be set manually in the web server configuration. If GIT_PROJECT_ROOT is not set, git http-backend reads PATH_TRANSLATED, which is also set automatically by the web server.
EXAMPLES¶
All of the following examples map http://$hostname/git/foo/bar.git to /var/www/git/foo/bar.git.
Apache 2.x
SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
To enable anonymous read access but authenticated write access, require authorization with a LocationMatch directive:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require group committers
... </LocationMatch>
To require authentication for both reads and writes, use a Location directive around the repository, or one of its parent directories:
<Location /git/private>
AuthType Basic
AuthName "Private Git Access"
Require group committers
... </Location>
To serve gitweb at the same url, use a ScriptAliasMatch to only those URLs that git http-backend can handle, and forward the rest to gitweb:
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
Accelerated static Apache 2.x
SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
This can be combined with the gitweb configuration:
SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/info/[^/]+ | \
git-(upload|receive)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
ENVIRONMENT¶
git http-backend relies upon the CGI environment variables set by the invoking web server, including:
The GIT_HTTP_EXPORT_ALL environmental variable may be passed to git-http-backend to bypass the check for the "git-daemon-export-ok" file in each repository before allowing export of that repository.
The backend process sets GIT_COMMITTER_NAME to $REMOTE_USER and GIT_COMMITTER_EMAIL to ${REMOTE_USER}@http.${REMOTE_ADDR}, ensuring that any reflogs created by git-receive-pack contain some identifying information of the remote user who performed the push.
All CGI environment variables are available to each of the hooks invoked by the git-receive-pack.
AUTHOR¶
Written by Shawn O. Pearce <spearce@spearce.org[1]>.
DOCUMENTATION¶
Documentation by Shawn O. Pearce <spearce@spearce.org[1]>.
GIT¶
Part of the git(1) suite
NOTES¶
- 1.
- spearce@spearce.org
02/03/2020 | Git 1.7.1 |